/**
 * 本地缓存工具类
 * 封装uni-app的storage API，支持过期时间
 */

/**
 * 设置缓存
 * @param {String} key - 缓存key
 * @param {Any} value - 缓存值
 * @param {Number} expireTime - 过期时间（毫秒），不传则永久有效
 */
function set(key, value, expireTime) {
	const data = {
		value,
		expireTime: expireTime ? Date.now() + expireTime : null
	};
	try {
		uni.setStorageSync(key, JSON.stringify(data));
	} catch (e) {
		console.error('缓存设置失败:', e);
	}
}

/**
 * 获取缓存
 * @param {String} key - 缓存key
 * @returns {Any} 缓存值，不存在或已过期返回null
 */
function get(key) {
	try {
		const dataStr = uni.getStorageSync(key);
		if (!dataStr) {
			return null;
		}

		const data = JSON.parse(dataStr);
		
		// 检查是否过期
		if (data.expireTime && Date.now() > data.expireTime) {
			remove(key);
			return null;
		}

		return data.value;
	} catch (e) {
		console.error('缓存获取失败:', e);
		return null;
	}
}

/**
 * 删除缓存
 * @param {String} key - 缓存key
 */
function remove(key) {
	try {
		uni.removeStorageSync(key);
	} catch (e) {
		console.error('缓存删除失败:', e);
	}
}

/**
 * 清空所有缓存
 */
function clear() {
	try {
		uni.clearStorageSync();
	} catch (e) {
		console.error('缓存清空失败:', e);
	}
}

/**
 * 获取所有缓存key
 * @returns {Array} 缓存key数组
 */
function getAllKeys() {
	try {
		const info = uni.getStorageInfoSync();
		return info.keys || [];
	} catch (e) {
		console.error('获取缓存keys失败:', e);
		return [];
	}
}

export default {
	set,
	get,
	remove,
	clear,
	getAllKeys
};

